<!--
 * @Author: WangGuojian 1085844536@qq.com
 * @Date: 2023-08-10 19:39:33
 * @LastEditTime: 2023-08-10 19:39:38
 * @LastEditors: WangGuojian 1085844536@qq.com
 * @FilePath: \vue-basic\12-列表渲染\7.模拟一个数据检测.html
 * @Description:
-->
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body>
        <script type="text/javascript">
            let data = {
                name: '尚硅谷',
                address: '北京',
            };

            // 创建一个监视的实例对象，用于监视data中属性的变化
            const obs = new Observer(data);
            console.log(obs);

            // 准备一个vm实例对象
            let vm = {};
            vm._data = data = obs;

            function Observer(obj) {
                // 汇总对象所有的属性形成一个数组
                const keys = Object.keys(obj);
                // 遍历
                keys.forEach((k) => {
                    Object.defineProperty(this, k, {
                        get() {
                            return obj[k];
                        },
                        set(val) {
                            console.log(
                                `${k}被改变了，我要去解析模板，生成虚拟DOM...我要开始忙`
                            );
                            obj[k] = val;
                        },
                    });
                });
            }
        </script>
    </body>
</html>
